# 使用官方 Node.js 运行时作为基础镜像，选择 LTS 版本 (Alpine 版本镜像更小)
FROM node:18.18.2

# 容器文件目录
RUN mkdir -p /usr/src/app

# 在容器内设置工作目录，后续命令都会在这个目录下执行
WORKDIR /usr/src/app

# 将 package.json 和 package-lock.json (或 yarn.lock) 复制到工作目录
# 利用 Docker 缓存层，只有在 package.json 变化时才会重新执行 npm install
COPY package*.json ./

# 安装依赖
# 如果使用 npm，使用淘宝镜像
RUN npm install --production --registry=https://registry.npmmirror.com

# 如果使用 yarn
# RUN yarn install --production

# 将项目所有源文件复制到工作目录
COPY . .

# 为 Egg.js 应用创建了一个非 root 用户，以提高安全性 (可选但推荐)
# RUN addgroup -g 1001 -S nodejs
# RUN adduser -S egg -u 1001

# 将文件所有权更改给 egg 用户
# RUN chown -R egg:nodejs /usr/src/app
# USER egg

# 暴露应用运行的端口（和 Egg.js 配置的端口一致，默认为 9000）
EXPOSE 9000

# 定义环境变量
# 如果你的应用需要其他环境变量（如 NODE_ENV），也可以在这里设置
ENV NODE_ENV=production
ENV TZ=Asia/Shanghai

# 启动应用
# 使用 npm start，它会运行 package.json 中 scripts 下的 start 命令
CMD [ "npm", "start" ]
